// var User = {
//     count: 1,
//     action:{
//         getCount: function(){
//             console.log('getCount', this)
//             return this.count
//         }
//     }
// }
// var getCount = User.action.getCount
// setTimeout(()=>{
//     console.log('result 1', User.action.getCount())
// })
// console.log('result 2',getCount())  

// function spawn (getFun) {
//     return new Promise((resolve, reject)=>{
//         const get = getFun()
//         function step(nextFun){
//             let next 
//             try {
//                 next = nextFun()
//             } catch (error) {
//                 return reject(error)
//             }
//             if(next.done){
//                 return resolve(next.value)
//             }
//             Promise.resolve(next.value)
//             .then(
//                 v=>step(()=>getFun.next(v)), 
//                 e=>step(()=>getFun.throw(e))
//             )
//         }
//         step(()=>get.next(undefined))
//     })
// }
// function a () {
//     console.log('a')
// }
// function b () {
//     console.log('b')
// }
// new Promise(resolve=>{
//     a()
//     resolve(b)
// }).then(fun=>{
//     console.log('then fun', fun())
// }).catch(error=>{

// })

function ajax (content) {
    console.log('ajax request: ', content)
}
function debounce (fun, delay) {
    return function(args){
        let that = this
        let _args = args
        clearTimeout(fun.id)
        fun.id = setTimeout(function(){
            fun.call(that, _args)
        }, delay)
    }
}
let inputb = document.getElementById('debounce')
let debounceAjax = debounce(ajax, 500)
inputb.addEventListener('keyup', (e)=>{
    debounceAjax(e.target.value)
})